public class L19R {

    public static void main(String[] args) {
        ListNode listNode = new ListNode(0, null);
//        ListNode listNode1 = new ListNode(1, listNode);
//        ListNode listNode2 = new ListNode(2, listNode1);
//        ListNode listNode3 = new ListNode(3, listNode2);

        new Solution().removeNthFromEnd(listNode, 1);
    }

    static class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            ListNode listNode = new ListNode(-1, head);
            ListNode node = listNode;
            ListNode slow = listNode;

            int fast = n + 1;
            while (fast > 0) {
                node = node.next;
                fast--;
            }

            while (node != null) {
                node = node.next;
                slow = slow.next;
            }

            slow.next = slow.next.next;

            return listNode.next;

        }
    }
}
